﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace Persistente.Usuario
{
    public class PUsuario
    {
        private DB_SIMETRIA _db;
        private SqlConnection _conexao = new SqlConnection(ConfigurationManager.ConnectionStrings["DB_SIMETRIA_SQL"].ConnectionString);

        public int Salvar(string nmUsuario, int idHash, string dsUsuario, string teNome, string teSobrenome, string csSexo, DateTime? dtNascimento, string teEmail, string teSenha, string teUrl, string teFoto, DateTime? dtCadastro, string nrCodigoAtivacao,int idTipoPele,int idCorPele, int idCorCabelo, int idTipoCabelo, int idPerfilCompra, int idTipoUsuario)
        {
            try
            {
                _db = new DB_SIMETRIA();
                var tbUsuario = new tb_usuario();
                tbUsuario.nm_usuario = nmUsuario;
                tbUsuario.id_hash = idHash;
                tbUsuario.ds_usuario = dsUsuario;
                tbUsuario.te_nome = teNome;
                tbUsuario.te_sobrenome = teSobrenome;
                tbUsuario.cs_sexo = csSexo;
                tbUsuario.dt_nascimento = dtNascimento;
                tbUsuario.te_email = teEmail;
                tbUsuario.te_senha = teSenha;
                tbUsuario.te_url = teUrl;
                tbUsuario.te_foto = teFoto;
                tbUsuario.dt_cadastro = DateTime.Now;
                tbUsuario.nr_codigo_ativacao = nrCodigoAtivacao;
                tbUsuario.tipo_pele_id_tipo_pele = idTipoPele;
                tbUsuario.cor_pele_id_cor_pele = idCorPele;
                tbUsuario.cor_cabelo_id_cor_cabelo = idCorCabelo;
                tbUsuario.tipo_cabelo_id_tipo_cabelo = idTipoCabelo;
                tbUsuario.perfil_compra_id_perfil_compra = idPerfilCompra;
                tbUsuario.nr_codigo_ativacao = nrCodigoAtivacao;
                tbUsuario.tipo_usuario_id_tipo_usuario = idTipoUsuario;

                _db.AddTotb_usuario(tbUsuario);
                _db.SaveChanges();

                return tbUsuario.id_usuario;

            }
            catch (Exception e)
            {
                throw;
            }
            finally
            {
                _db.Connection.Close();
            }

        }

        public bool Remover(int idUsuario)
        {
            try
            {
                _db = new DB_SIMETRIA();
                var obTbUsuario = _db.tb_usuario.Where(q => q.id_usuario == idUsuario).FirstOrDefault();
                if (obTbUsuario == null)
                {
                    return false;
                }
                else
                {
                    _db.tb_usuario.DeleteObject(obTbUsuario);
                    _db.SaveChanges();
                    return true;
                }

            }
            catch (Exception e)
            {
                throw;
            }
            finally
            {
                _db.Connection.Close();
            }
        }

        public DataSet pegarUsuarios(string nmUsuario = null, int idHash = 0, string dsUsuario = null, string teNome =null, string teSobrenome=null, string csSexo=null, DateTime? dtNascimento = null, string teEmail = null, string teSenha = null, string teUrl = null, DateTime? dtCadastro = null, string nrCodigoAtivacao = null, int idTipoPele = 0, int idCorPele = 0, int idCorCabelo = 0, int idTipoCabelo = 0, int idPerfilCompra = 0, int idTipoUsuario = 0)
        {

            var ds = new DataSet();

            string query = "SELECT ";
            query += " id_usuario";
            query += ", nm_usuario";
            query += ", te_nome";
            query += ", te_sobrenome";
            query += ", cs_sexo";
            query += ", tu.id_tipo_usuario";
            query += ", tu.ds_tipo_usuario";
            query += ", ds_usuario";
            query += ", dt_nascimento";
            query += ", te_email";
            query += ", te_foto";
            query += ", te_url";
            query += ", dt_cadastro";
            query += ", tp.id_tipo_pele";
            query += ", tp.nm_tipo_pele";
            query += ", cp.id_cor_pele";
            query += ", cp.nm_cor_pele";
            query += ", tc.id_tipo_cabelo";
            query += ", tc.nm_tipo_cabelo";
            query += ", cc.id_cor_cabelo";
            query += ", cc.nm_cor_cabelo";
            query += ", pc.id_perfil_compra";
            query += ", pc.nm_perfil_compra";
            query += " FROM tb_usuario u";
            query += ", tb_tipo_usuario tu";
            query += ", tb_tipo_pele tp";
            query += ", tb_cor_pele cp";
            query += ", tb_tipo_cabelo tc";
            query += ", tb_cor_cabelo cc";
            query += ", tb_perfil_compra pc";

            query += " WHERE u.tipo_usuario_id_tipo_usuario = tu.id_tipo_usuario" +
                     " AND u.tipo_pele_id_tipo_pele = tp.id_tipo_pele" +
                     " AND u.cor_pele_id_cor_pele = cp.id_cor_pele" +
                     " AND u.cor_cabelo_id_cor_cabelo = cc.id_cor_cabelo" +
                     " AND u.tipo_cabelo_id_tipo_cabelo = tc.id_tipo_cabelo " +
                     " AND u.perfil_compra_id_perfil_compra = pc.id_perfil_compra ";

            if (!string.IsNullOrEmpty(nmUsuario))
            {
                query += " AND nm_usuario LIKE '%" + nmUsuario + "%'";
            }

            if (!string.IsNullOrEmpty(dsUsuario))
            {
                query += " AND ds_usuario LIKE '%" + dsUsuario + "%'";
            }     
       
            if (!string.IsNullOrEmpty(teEmail))
            {
                query += " AND te_email LIKE '%" + teEmail + "%'";
            }

            if (!string.IsNullOrEmpty(teUrl))
            {
                query += " AND te_url LIKE '%" + teUrl + "%'";
            }

            if (!string.IsNullOrEmpty(teNome))
            {
                query += " AND te_nome LIKE '%" + teNome + "%'";
            }

            if (!string.IsNullOrEmpty(teSobrenome))
            {
                query += " AND te_sobrenome LIKE '%" + teSobrenome + "%'";
            }

            if (!string.IsNullOrEmpty(csSexo))
            {
                query += " AND cs_sexo = '" + csSexo + "'";
            }

            if (dtCadastro != null)
            {
                query += " AND dt_cadastro = '" + dtCadastro + "'";
            }

            if (dtNascimento != null)
            {
                query += " AND dt_nascimento = '" + dtNascimento + "'";
            }

            if (idTipoUsuario != 0)
            {
                query += " AND tu.id_tipo_usuario =" + idTipoUsuario;
            }

            if (idTipoPele != 0)
            {
                query += " AND tp.id_tipo_pele =" + idTipoPele;
            }

            if (idCorPele != 0)
            {
                query += " AND cp.id_cor_pele =" + idCorPele;
            }


            if (idTipoCabelo != 0)
            {
                query += " AND tc.id_tipo_cabelo =" + idTipoCabelo;
            }

            if (idCorCabelo != 0)
            {
                query += " AND cc.id_cor_cabelo =" + idCorCabelo;
            }

            if (idPerfilCompra != 0)
            {
                query += " AND pc.id_perfil_compra =" + idPerfilCompra;
            }
            var cmd = new SqlCommand(query, _conexao);

            cmd.Connection = _conexao;

            if (_conexao.State == ConnectionState.Closed)
            {
                _conexao.Open();
            }

            var dataAdapter = new SqlDataAdapter(cmd);
            dataAdapter.Fill(ds);

            _conexao.Close();

            return ds;
        }

        public tb_usuario pegarUsuarioPorId(int idUsuario)
        {
            try
            {
                _db = new DB_SIMETRIA();
                return _db.tb_usuario.Where(q => q.id_usuario == idUsuario).FirstOrDefault();
            }
            catch (Exception e)
            {
                throw;
            }
            finally
            {
                _db.Connection.Close();
            }
        }

        public bool Alterar(int idUsuario, tb_usuario obTbUsuarioNovo)
        {
            try
            {
                _db = new DB_SIMETRIA();
                var obTbUsuarioVelho =
                    _db.tb_usuario.Where(q => q.id_usuario == idUsuario).FirstOrDefault();

                obTbUsuarioVelho.nm_usuario = obTbUsuarioNovo.nm_usuario;
                obTbUsuarioVelho.ds_usuario = obTbUsuarioNovo.ds_usuario;
                obTbUsuarioVelho.te_url = obTbUsuarioNovo.te_url;
                obTbUsuarioVelho.te_email = obTbUsuarioNovo.te_email;
                obTbUsuarioVelho.id_hash = obTbUsuarioNovo.id_hash;
                obTbUsuarioVelho.te_nome = obTbUsuarioNovo.te_nome;
                obTbUsuarioVelho.te_sobrenome = obTbUsuarioNovo.te_sobrenome;
                obTbUsuarioVelho.cs_sexo = obTbUsuarioNovo.cs_sexo;
                obTbUsuarioVelho.te_foto = obTbUsuarioNovo.te_foto;
                obTbUsuarioVelho.cor_cabelo_id_cor_cabelo = obTbUsuarioNovo.cor_cabelo_id_cor_cabelo;
                obTbUsuarioVelho.cor_pele_id_cor_pele = obTbUsuarioNovo.cor_pele_id_cor_pele;
                obTbUsuarioVelho.tipo_cabelo_id_tipo_cabelo = obTbUsuarioNovo.tipo_cabelo_id_tipo_cabelo;
                obTbUsuarioVelho.tipo_pele_id_tipo_pele = obTbUsuarioNovo.tipo_pele_id_tipo_pele;
                obTbUsuarioVelho.dt_nascimento = obTbUsuarioNovo.dt_nascimento;
                obTbUsuarioVelho.nr_codigo_ativacao = obTbUsuarioNovo.nr_codigo_ativacao;

                _db.SaveChanges();
                return true;
            }
            catch (Exception e)
            {
                throw;
            }
            finally
            {
                _db.Connection.Close();
            }
        }

    }
}
